﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace StringVSstring
{
    class Program
    {
        static void Main(string[] args)
        {
            //1. La clase String representa una cádena de caracteres Unicode

            //2. El tipo String es una clase sellada que hereda directamente de Object, esto
            //   significa que no puedes heredar de String.

            //3. La palabra clave string es simplemente un alias para la predefinida clase System.String
            //   de la misma forma en que int lo es de la estructura System.Int32.
            Console.WriteLine(typeof(string));
            Console.WriteLine(typeof(String));
            Console.WriteLine(typeof(int));
            Console.WriteLine(typeof(Int32));
            Console.WriteLine(typeof(long));
            Console.WriteLine(typeof(Int64));
            Console.WriteLine(typeof(double));
            Console.WriteLine(typeof(Double));
            Console.WriteLine(typeof(bool));
            Console.WriteLine(typeof(Boolean));

            //4. El resultado de usar string.Concat() o String.Concat() es el mismo, sin embargo por un tema de estandares de codificacion deberiamos
            //  usar String para los metodos y string para definir variables.

            // Correcto
            string nombre;
            int edad;
            bool esFacil;

            // Incorrecto
            //String nombre;
            //Int32 edad;
            //Boolean esFacil;

            Console.WriteLine(String.Concat("Hello! ", "xamldevelopment"));
            Console.WriteLine(string.Concat("Hello! ", "xamldevelopment"));

            //5. Ya que la clase String implementa la interface IEnumerable<char> puedes hacer uso de las extenciones definidas en System.Linq.
            string miCadena = "1. Xaml Development es lo máximo. Compartan http://xamldevelopment.blogspot.com";
            miCadena.ToList().ForEach(c => Console.Write(c + "-"));
            Console.WriteLine();

            Console.Write("¿Existe alguna l en mi cadena de caracteres?: ");
            Console.Write(miCadena.Any(c => c == 'l'));
            Console.WriteLine();

            Console.Write("¿Existe algun numero en mi cadena de caracteres?: ");
            Regex regex = new Regex(@"\d");
            Console.Write(miCadena.Any(c => regex.IsMatch(c.ToString())));
                

            Console.Read();
        }
    }
}
